package cn.tj.wenda.cloud.bas.service;

import java.util.List;

import cn.tj.wenda.cloud.bas.entity.BasLoginInfo;
import cn.tj.wenda.cloud.bas.entity.BasPassword;
import cn.tj.wenda.cloud.bas.entity.BasUser;
import cn.tj.wenda.cloud.bas.entity.BasUserDept;
import cn.tj.wenda.cloud.bas.entity.BasUserMulti;

/**
 * 用户管理业务接口类
 * @author Wenda
 * @date 2018年9月21日
 */
public interface BasUserService {
	/**
	 * 取得所有用户一览
	 * @param page 检索开始位置
	 * @param limit 每页显示条数 limit=0 返回符合params的所有数据,且不进行分页
	 * @param params 检索条件（JSON格式）userid 查询项必须是一个List<String>
	 * @return 用户一览
	 */
	public List<BasUser> select(int page,int limit,String params);
	
	/**
	 * 取得所有用户一览
	 * @param page 检索开始位置
	 * @param limit 每页显示条数 limit=0 返回符合params的所有数据,且不进行分页
	 * @param params 检索条件（JSON格式）userid 查询项必须是一个List<String>
	 * @return 用户一览
	 */
	public List<BasUserMulti> selectUserDept(int page,int limit,String params);
	
	/**
	 * 取得所有用户+部门一览
	 * @param page 检索开始位置
	 * @param limit 每页显示条数 limit=0 返回符合params的所有数据,且不进行分页
	 * @param params 检索条件（JSON格式）deptid 查询项必须是一个List<String>
	 * @return 用户一览
	 */
	public List<BasUserMulti> selectUserAndDept(int page, int limit, String params);
	
	
	/**
	 * 更新一条用户信息
	 * 
	 * @param userid 用户ID
	 * @param basUser 用户记录
	 * @return 更新件数
	 */
	public int update(String userid, BasUser basUser);
	
	/**
	 * 添加一条用户信息
	 * 
	 * @param basUser 用户记录
	 * @return 添加件数
	 */
	public int insert(BasUser basUser);

	/**
	 * 删除一条用户信息
	 * 
	 * @param userid 用户ID
	 * @return 删除件数
	 */
	public int delete(String userid);
	
	/**
	 * 根据关键字查询一条用户信息
	 * @param userid
	 * @return
	 */
	public BasUser selectByPrimaryKey(String userid);
	
	
	/**
	 * 获取所有用户和部门的关系
	 * @return
	 */
	public List<BasUserDept> selectUserDeptRef();
		
	/**
	 * 批量重置密码
	 * @param userIds
	 * @return
	 */
	public int resetPwd(List<String> userIds);
	
	/**
	 * 主要为更新密码时使用
	 * @param basPassword
	 * @return
	 */
	public int updatePwd(BasPassword basPassword);
	
	/**
	 * 登录时获取给定用户信息
	 * @param basLoginInfo 用户登录信息
	 * @return JWT
	 */
	public String login(BasLoginInfo basLoginInfo);
	
	/**
	 * 取得给定人员所在的部门
	 * @param userId
	 * @return
	 */
	public List<BasUserDept> selectUserDept(String userId);
	
	/**
	 * 保存给定用户所属部门
	 * @param userId
	 * @param deptIds
	 * @return
	 */
	public int saveUserDept(String userId, List<BasUserDept> deptIds);

}
